package org.jsola.hr.provider;

import org.jsola.hr.dto.ChildCompanyAddDTO;
import org.jsola.hr.dto.ChildCompanyUpdateDTO;
import org.jsola.hr.entity.DepInfoDO;
import org.jsola.hr.entity.EmpDepDO;
import org.jsola.hr.vo.ChildCompanyVO;
import org.jsola.permission.entity.GroupDO;
import org.jsola.permission.query.GroupQuery;
import org.jsola.permission.vo.GroupListVO;
import org.jsola.user.core.TokenUser;

import java.util.List;

/**
 * @author june
 */
public interface IPermissionGroupProviderService {


    /**
     * 权限同步增加组
     *
     * @param depInfoDO hr组
     * @param tokenUser 当前用户
     */
    void saveGroupByDep(DepInfoDO depInfoDO, TokenUser tokenUser);

    /**
     * 权限同步修改组
     *
     * @param groupId   组id
     * @param tokenUser 当前用户
     */
    void updateGroup(String groupId, TokenUser tokenUser);

    /**
     * 权限同步删除组
     *
     * @param depInfoIds 组id
     * @param tokenUser  当前用户
     */
    void deleteGroupByIds(String[] depInfoIds, TokenUser tokenUser);

    /**
     * 同步增加权限组内用户
     *
     * @param empDepDO  部门成员关系
     * @param tokenUser 当前用户
     */
    void saveGroupUserByDep(EmpDepDO empDepDO, TokenUser tokenUser);

    /**
     * 同步修改权限组内用户
     *
     * @param groupUserId 部门成员id
     * @param tokenUser   当前用户
     */
    void updateGroupUser(String groupUserId, TokenUser tokenUser);

    /**
     * 同步删除权限组内用户
     *
     * @param groupUserIds 部门成员id
     * @param tokenUser    当前用户
     */
    void deleteGroupUser(String[] groupUserIds, TokenUser tokenUser);

    /**
     * 同步更新权限用户部门(删除旧的,增加新的)
     *
     * @param oldEmpDepList 旧的对应关系,要删除的
     * @param newEmpDepList 新的对应关系,增加
     * @param tokenUser     当前用户
     */
    void updateUsersGroup(List<EmpDepDO> oldEmpDepList, List<EmpDepDO> newEmpDepList, TokenUser tokenUser);

    /**
     * 根据group获取分组
     *
     * @param groupId 分组id
     * @param siteId  站点
     * @return 分组信息
     */
    GroupDO selectDOById(String groupId, String siteId);

    /**
     * 查询组织
     *
     * @param groupQuery 查询条件
     * @param siteId     所属站点id
     * @return 组织列表信息
     */
    List<GroupListVO> select(GroupQuery groupQuery, String siteId);


    /**
     * 子公司添加组/组管理员
     *
     * @param childCompanyAdd 子公司信息
     * @param childCompanyId  子公司d
     * @param tokenUser       当前用户
     * @return 子公司组/管理员信息
     */
    ChildCompanyVO saveGroupByChildCompany(ChildCompanyAddDTO childCompanyAdd, String childCompanyId, TokenUser tokenUser);


    /**
     * 子公司修改组/组管理员
     *
     * @param childCompanyUpdate 子公司信息
     * @param childCompanyId     子公司id
     * @param tokenUser          当前用户
     * @return 子公司组/管理员信息
     */
    ChildCompanyVO updateGroupByChildCompany(ChildCompanyUpdateDTO childCompanyUpdate, String childCompanyId, TokenUser tokenUser);

    /**
     * 删除子公司相关信息
     *
     * @param groupId   组id
     * @param tokenUser 当前用户
     */
    void deleteChildCompany(String groupId, TokenUser tokenUser);

    /**
     * 根据id获取子公司信息
     *
     * @param childCompany 子公司信息
     * @param siteId       站点
     * @return 子公司信息
     */
    ChildCompanyVO findChildCompanyById(ChildCompanyVO childCompany, String siteId);

    /**
     * 获取用户所在的组
     *
     * @param userId 用户id
     * @param siteId 站点
     * @return 用户所在的组
     */
    List<String> listGroupByUser(String userId, String siteId);
}
